<?php

namespace App\Http\Middleware;

use App\Model\Menu;
use App\Model\Permission;
use Closure;
use Illuminate\Support\Facades\Auth;

class AuthHome
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next , $guard = '')
    {
        // 获取 当前的 路由控制器
        $route = $this->getRoute();
        $auth = Auth::guard($guard);
        // 判断 是否是 后台 登陆方法
        if($guard == 'admin' ){
            if(!$auth->check()){
                return redirect(action('Home\LoginController@index'));
            }
            // 搜索 查看当前 控制器 是否存在
            $route = Permission::where('action',$route)->first();
            if($route){
                $route = $route->toArray();
            }
            if(!$route){
                $data = array('name'=>$this->getRoute(),'action'=>$this->getRoute());
                // 创建 权限
                $route = Permission::permission_create($data)['data'];
            }
            // 将 当前路由信息 存入 requiest 属性中
            $request->attributes->set('route',$route);
            // 获取 session 用户信息
            $admin = auth()->user();
            $permission = $admin->Permission();
            // 判断 是否 有此权限
            if(!isset($permission[$route['id']])){
                // 判断 用户 id 是否等于 1
                if($admin['id'] != 1){
                    // 用户id 不等于1 提示 无权限
                    $this->notPermission();
                }else{
                    // 用户 id 等于 1 获取 所有权限
                    $permission[$route['id']] = '';
                    $permission = $admin->Permission(1);
                }
            }
            $request->attributes->set('menus',Menu::Permission_menu($permission));
//            dd(request()->attributes->get('menus'));
        }
        return $next($request);
    }

    // 根据 权限 获取 菜单
//    protected function menu($permission){
//        $ids = array_keys($permission);
//        $ids[] = 0;
//        $ids[] = '';
//        $menu = Menu::whereIn('permission',$ids)->orderBy('id','desc')->get()->toArray();
//        $route = request()->attributes->get('route');
//        foreach($menu as &$val){
//            if(isset($m)){
//                if($val['id'] == $m['pid']){
//                    $val['click'] = 1;
//                    if($val['pid']){
//                        $m = $val;
//                    }
//                }
//            }else{
//                if($val['permission'] == $route['id']){
//                    $val['click'] = 1;
//                    $m = $val;
//                }
//            }
//        }
//        $menu = Menu::getMenus($menu);
//        ksort($menu);
//        return $menu;
//    }

    // 获取 权限信息
    protected function getPermission(){
        $route = $this->getRoute();
        $admin = (object) array();
        $admin->id = 1;
        if($admin->id && $admin->id == 1){
            $route = Permission::where('action',$route)->first();
            if($route){
                $data = array('name'=>$route,'action'=>$route);
                // 创建 权限
                $route = Permission::permission_create($data);
                // 获取 所有权限
            }
        }else{
            // 获取 用户的 权限信息
            // 判断 是否有权限
                // 没有权限
                $this->notPermission();

            $route = Permission::where('action',$route.'1')->first();
        }
        return $route;
    }
    // 获取 控制器 的路径
    protected function getRoute(){
        $route = \Route::current()->getActionName();
        return substr($route,21);
    }

    // 没有权限 时候 显示的 信息
    protected function notPermission(){
        if(request()->ajax()){
            header('Content-type: application/json');
            die(json_encode(Json::error(trans('auth.NotPermission'))));
        }else{
            die(view('NotPermission'));
        }
    }

}
